/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import beans.CandidatoBean;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import utilidades.ConnectionFactory;

/**
 *
 * @author programador
 */

public class CandidatoDAO implements Serializable {
    
   private Connection conn;
    
   public CandidatoDAO() {
       
      try {   
         this.conn = ConnectionFactory.getConnection();
      }
      catch(SQLException sqle) {
         System.out.println("Erro " + sqle.getMessage());
      }
      catch(Exception e) {
         System.out.println("Erro " + e.getMessage());
      }
   
   }
   
   public void salvar(CandidatoBean candidato) throws Exception {
       
      PreparedStatement ps = null;
      Connection connection =  null;
      if(candidato == null)
         throw new Exception("O valor passado não pode se nulo");
      
      try {
         String SQL = "INSERT INTO candidatos (nome) VALUES (?)";
         connection = this.conn;
         ps = connection.prepareStatement(SQL);
         ps.setString(1, candidato.getNome());
         ps.executeUpdate();
      }
      catch(SQLException sqle) {
         throw new Exception("Erro ao inserir dados " + sqle);    
      }
      finally {
         ConnectionFactory.closeConnection(connection, ps);  
      }
   
   }
   
   public CandidatoBean procurarCandidato(String nome) throws Exception {
       
      PreparedStatement ps = null;
      Connection connection;
      ResultSet rs = null;
      
      try {
         connection = this.conn;
         ps = connection.prepareStatement("SELECT nome FROM candidatos WHERE nome = ?");
         ps.setString(1, nome);
         rs = ps.executeQuery();
         CandidatoBean candidato = null;
         if(!rs.next()) {
            System.out.println("Não foi encontrado nenhum candidato com o nome informado!"); 
            return candidato;
         }
         return new CandidatoBean(nome);
      }
      catch(SQLException sqle) {
         throw new Exception(sqle);    
      }
      finally {
         ConnectionFactory.closeConnection(conn, ps, rs);
      }
   
   }
   
   public List getTodosCandidatos() throws Exception {
       
      PreparedStatement ps = null;
      Connection connection;
      ResultSet rs = null;
      
      try {
         connection = this.conn; 
         ps = connection.prepareStatement("SELECT id, nome FROM candidatos");
         rs = ps.executeQuery();
         List<CandidatoBean> lista = new ArrayList<CandidatoBean>();
         while(rs.next()) {
            Integer id = rs.getInt(1);
            String nome = rs.getString(2);
            lista.add(new CandidatoBean(id, nome));
         }
         return lista;
      }
      catch(SQLException sqle) {
         throw new Exception(sqle);    
      }
      finally {
         ConnectionFactory.closeConnection(conn, ps, rs);
      }
       
   }
   
   public void editar(CandidatoBean candidato) throws Exception {
       
      PreparedStatement ps = null;
      Connection connection =  null;
      if(candidato == null)
         throw new Exception("O valor passado não pode se nulo");
      try {
         String SQL = "UPDATE candidatos SET nome = ? WHERE id = ?";
         connection = this.conn;
         ps = connection.prepareStatement(SQL);
         ps.setString(1, candidato.getNome());
         ps.setInt(2, candidato.getId());
         ps.execute();
      }
      catch(SQLException sqle) {
         throw new Exception("Erro ao editar dados " + sqle);    
      }
      finally {
         ConnectionFactory.closeConnection(connection, ps);  
      }
   
   }
   
   public void excluir(CandidatoBean candidato) {
       
      PreparedStatement ps = null;
      Connection connection;
                  
      try {
         connection = this.conn;
         ps = connection.prepareStatement("DELETE FROM candidatos WHERE nome = ?");
         ps.setString(1, candidato.getNome());
         int i = ps.executeUpdate();
         System.out.println(i);
      }
      catch(SQLException sqle) {
         System.out.println(sqle);    
      }
      catch(Exception e) {
         System.out.println(e);
      }
      finally {
         try { 
            ConnectionFactory.closeConnection(conn, ps);
         }
         catch(Exception e) {
            System.out.println(e);
         }
      }
             
   }
   
   public CandidatoBean getCandidatoEspecifico(String query) {
       
      PreparedStatement ps = null;
      Connection connection;
      ResultSet rs = null;
      CandidatoBean candidato = null;
      
      try {
         connection = this.conn;
         ps = connection.prepareStatement("SELECT * FROM candidatos WHERE nome = ?");
         ps.setString(1, query);
         rs = ps.executeQuery();
         while(rs.next()) {
            Integer id = rs.getInt("id");
            String nome = rs.getString("nome");
            candidato = new CandidatoBean(id, nome);   
         }
         return candidato;
      }
      catch(SQLException sqle) {
         System.out.println(sqle);    
      }
      catch(Exception e) {
         System.out.println(e);
      }
      finally {
         try { 
            ConnectionFactory.closeConnection(conn, ps, rs);
         }
         catch(Exception e) {
            System.out.println(e);
         }
      }
   
      return candidato;
   
   }

}